package com.example.mapper;

import com.example.entity.EditSession;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface EditSessionMapper {

    /**
     * 插入新的编辑会话
     */
    int insertEditSession(EditSession editSession);

    /**
     * 更新编辑会话
     */
    int updateEditSession(EditSession editSession);

    /**
     * 根据会话ID获取编辑会话
     */
    EditSession getSessionById(@Param("sessionId") String sessionId);

    /**
     * 根据文档ID获取活跃的编辑会话
     */
    List<EditSession> getActiveSessionsByDocumentId(@Param("documentId") Integer documentId);

    /**
     * 根据用户名获取活跃的编辑会话
     */
    List<EditSession> getActiveSessionsByUsername(@Param("editorUsername") String editorUsername);

    /**
     * 结束编辑会话
     */
    int endEditSession(@Param("sessionId") String sessionId);

    /**
     * 更新会话最后活动时间
     */
    int updateLastActivity(@Param("sessionId") String sessionId);

    /**
     * 删除过期的编辑会话
     */
    int deleteExpiredSessions(@Param("expireMinutes") Integer expireMinutes);

    /**
     * 检查文档是否被其他用户锁定
     */
    EditSession getActiveSessionByDocumentIdAndNotUser(@Param("documentId") Integer documentId,
            @Param("editorUsername") String editorUsername);
}